package com.aaa.rabbitmq;
/*
  RabbitMQ Java 简单示例
  这个示例展示了最基础的生产者-消费者模型
 */

// 生产者代码
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.nio.charset.StandardCharsets;

public class SimpleProducer {
    // 定义队列名称
    private final static String QUEUE_NAME = "hello_queue";

    public static void main(String[] argv) throws Exception {
        // 创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        // 设置RabbitMQ服务器的地址
        factory.setHost("localhost");
        factory.setPort(5672); // 显式指定AMQP端口

        // 创建连接和通道
        try (Connection connection = factory.newConnection();
             Channel channel = connection.createChannel()) {

            // 声明队列 - 如果队列不存在则创建它
            // 参数说明:
            // 1. queue: 队列名称
            // 2. durable: 是否持久化（true表示RabbitMQ重启后队列仍存在）
            // 3. exclusive: 是否独占（true表示仅限于当前连接使用）
            // 4. autoDelete: 是否自动删除（true表示当最后一个消费者断开连接时自动删除队列）
            // 5. arguments: 队列的其他属性（如消息TTL、队列长度限制等）
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);

            // 要发送的消息内容
            String message = "你好，这是一条来自生产者的消息!";

            // 发布消息到队列
            // 参数说明:
            // 1. exchange: 交换机名称，空字符串表示使用默认交换机
            // 2. routingKey: 路由键，简单模式下与队列名相同
            // 3. props: 消息的属性，如投递模式、优先级等
            // 4. body: 消息体
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8));

            System.out.println(" [生产者] 发送消息: '" + message + "'");
        }
    }
}